This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

require(dplyr)
Carregando pacotes exigidos: dplyr

Attaching package: 㤼㸱dplyr㤼㸲

The following objects are masked from 㤼㸱package:stats㤼㸲:

    filter, lag

The following objects are masked from 㤼㸱package:base㤼㸲:

    intersect, setdiff, setequal, union
require(igraph)
Carregando pacotes exigidos: igraph

Attaching package: 㤼㸱igraph㤼㸲

The following objects are masked from 㤼㸱package:dplyr㤼㸲:

    as_data_frame, groups, union

The following objects are masked from 㤼㸱package:stats㤼㸲:

    decompose, spectrum

The following object is masked from 㤼㸱package:base㤼㸲:

    union
# Load Hospitalization Data
flows<-read.csv(url('https://s3-sa-east-1.amazonaws.com/ckan.saude.gov.br/SRAG/2021/INFLUD21-05-07-2021.csv'))%>%
  filter()
# Load Hospitalization Data
flows<-read.table('Z:/Master/Datasus/raw/SRAG/influd21-18-06-2021.csv',sep=';',header=T,encoding='UTF-8')%>%
  filter(SG_UF_INTE=='SP'&SG_UF=='SP')%>%
  mutate(date=as.Date(DT_INTERNA,format='%D/%M/%Y'),
         age=NU_IDADE_N)
flows_count<-flows%>%
  filter(!is.na(CO_MUN_RES)&!is.na(CO_MU_INTE))%>%
  group_by(mun_res=CO_MUN_RES,mun_hosp=CO_MU_INTE)%>%
  summarize(count=n(),count_icu=sum(ifelse(UTI==1,1,0)))%>%
  mutate(share=count/sum(count),share_icu=count_icu/sum(count_icu,na.rm=T))
`summarise()` regrouping output by 'mun_res' (override with `.groups` argument)
# Load Shapefile
require(geobr)
Carregando pacotes exigidos: geobr
require(sf)
Carregando pacotes exigidos: sf
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
shp<-read_municipality(year=2020)%>%
  filter(abbrev_state=='SP')%>%
  mutate(mun=floor(code_muni/10))%>%
  select(mun,name_muni,geom)
Using year 2020
Loading data for the whole country. This might take a few minutes.

  |                                                                                                                                          
  |                                                                                                                                    |   0%
  |                                                                                                                                          
  |=====                                                                                                                               |   4%
  |                                                                                                                                          
  |==========                                                                                                                          |   7%
  |                                                                                                                                          
  |===============                                                                                                                     |  11%
  |                                                                                                                                          
  |====================                                                                                                                |  15%
  |                                                                                                                                          
  |========================                                                                                                            |  19%
  |                                                                                                                                          
  |=============================                                                                                                       |  22%
  |                                                                                                                                          
  |==================================                                                                                                  |  26%
  |                                                                                                                                          
  |=======================================                                                                                             |  30%
  |                                                                                                                                          
  |============================================                                                                                        |  33%
  |                                                                                                                                          
  |=================================================                                                                                   |  37%
  |                                                                                                                                          
  |======================================================                                                                              |  41%
  |                                                                                                                                          
  |===========================================================                                                                         |  44%
  |                                                                                                                                          
  |================================================================                                                                    |  48%
  |                                                                                                                                          
  |====================================================================                                                                |  52%
  |                                                                                                                                          
  |=========================================================================                                                           |  56%
  |                                                                                                                                          
  |==============================================================================                                                      |  59%
  |                                                                                                                                          
  |===================================================================================                                                 |  63%
  |                                                                                                                                          
  |========================================================================================                                            |  67%
  |                                                                                                                                          
  |=============================================================================================                                       |  70%
  |                                                                                                                                          
  |==================================================================================================                                  |  74%
  |                                                                                                                                          
  |=======================================================================================================                             |  78%
  |                                                                                                                                          
  |============================================================================================================                        |  81%
  |                                                                                                                                          
  |================================================================================================================                    |  85%
  |                                                                                                                                          
  |=====================================================================================================================               |  89%
  |                                                                                                                                          
  |==========================================================================================================================          |  93%
  |                                                                                                                                          
  |===============================================================================================================================     |  96%
  |                                                                                                                                          
  |====================================================================================================================================| 100%
shp_centroid<-shp%>%
  group_by(mun)%>%
  mutate(centr=st_centroid(geom))
require(ggplot2)
require(plotly)
# Network
nodes<-flows_count%>%
  data.table::melt(measure.vars=c('mun_res','mun_hosp'))%>%
  distinct(value)%>%
  dplyr::rename(mun=value)

edges<-nodes%>%rename(mun_res=mun)%>%
  merge(nodes%>%rename(mun_hosp=mun),all=T)%>%
  left_join(flows_count,by=c('mun_res','mun_hosp'))%>%
  mutate_at(.vars=c('share','share_icu'),.funs=function(x) {ifelse(is.na(x),0,x)})%>%
  rename(weight=share)

dir_net<-graph_from_data_frame(edges%>%rename(),nodes,directed=TRUE)
nodes_cluster<-nodes%>%
  mutate(cluster_fg=cluster_fast_greedy(as.undirected(dir_net))$membership,
         label=reorder(paste0('Cluster: ',cluster_fg),cluster_fg))
  
    
# Map
  gph=ggplot(nodes_cluster%>%
               inner_join(shp,by=c('mun')),aes(text=name_muni))+
    geom_sf(aes(geometry=geom,fill=label),lwd=0.1,show.legend=F)+
    geom_sf(data=shp_centroid%>%filter(name_muni=='São Paulo')%>%ungroup,aes(geometry=centr))+
    theme_void()+
    theme(axis.line=element_blank())+
    scale_fill_manual(values=rep(RColorBrewer::brewer.pal(n=12,name='Paired'),times=10))+
    guides(fill=guide_legend(ncol=3))+
    labs(caption='Note: Check cluster by hovering over each municipality')

  plotly::ggplotly(gph,tooltip=c('text','fill'))

Figure 1: SRAG Hospitalization Flows and Clusters in 2021

# Map
  gph=ggplot(nodes_cluster%>%
               inner_join(shp,by=c('mun')),aes(text=name_muni))+
    geom_sf(aes(geometry=geom,fill=label),lwd=0.1,show.legend=F)+
    geom_sf(data=shp_centroid%>%filter(name_muni=='São Paulo')%>%ungroup,aes(geometry=centr))+
    theme_void()+
    theme(axis.line=element_blank())+
    scale_fill_manual(values=rep(RColorBrewer::brewer.pal(n=12,name='Paired'),times=10))+
    guides(fill=guide_legend(ncol=3))+
    labs(caption='Note: Check cluster by hovering over each municipality')

  plotly::ggplotly(gph,tooltip=c('text','fill'))
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLiANCg0KVHJ5IGV4ZWN1dGluZyB0aGlzIGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqUnVuKiBidXR0b24gd2l0aGluIHRoZSBjaHVuayBvciBieSBwbGFjaW5nIHlvdXIgY3Vyc29yIGluc2lkZSBpdCBhbmQgcHJlc3NpbmcgKkN0cmwrU2hpZnQrRW50ZXIqLiANCg0KYGBge3IsIHdhcm5pbmc9Rn0NCnJlcXVpcmUoZHBseXIpDQpyZXF1aXJlKGlncmFwaCkNCmBgYA0KDQpgYGB7cn0NCiMgTG9hZCBIb3NwaXRhbGl6YXRpb24gRGF0YQ0KIyBmbG93czwtcmVhZC5jc3YodXJsKCdodHRwczovL3MzLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tL2NrYW4uc2F1ZGUuZ292LmJyL1NSQUcvMjAyMS9JTkZMVUQyMS0wNS0wNy0yMDIxLmNzdicpKSU+JQ0KIyAgIGZpbHRlcigpDQpgYGANCg0KDQpgYGB7cn0NCiMgTG9hZCBIb3NwaXRhbGl6YXRpb24gRGF0YQ0KZmxvd3M8LXJlYWQudGFibGUoJ1o6L01hc3Rlci9EYXRhc3VzL3Jhdy9TUkFHL2luZmx1ZDIxLTE4LTA2LTIwMjEuY3N2JyxzZXA9JzsnLGhlYWRlcj1ULGVuY29kaW5nPSdVVEYtOCcpJT4lDQogIGZpbHRlcihTR19VRl9JTlRFPT0nU1AnJlNHX1VGPT0nU1AnKSU+JQ0KICBtdXRhdGUoZGF0ZT1hcy5EYXRlKERUX0lOVEVSTkEsZm9ybWF0PSclRC8lTS8lWScpLA0KICAgICAgICAgYWdlPU5VX0lEQURFX04pDQoNCmBgYA0KDQoNCmBgYHtyfQ0KZmxvd3NfY291bnQ8LWZsb3dzJT4lDQogIGZpbHRlcighaXMubmEoQ09fTVVOX1JFUykmIWlzLm5hKENPX01VX0lOVEUpKSU+JQ0KICBncm91cF9ieShtdW5fcmVzPUNPX01VTl9SRVMsbXVuX2hvc3A9Q09fTVVfSU5URSklPiUNCiAgc3VtbWFyaXplKGNvdW50PW4oKSxjb3VudF9pY3U9c3VtKGlmZWxzZShVVEk9PTEsMSwwKSkpJT4lDQogIG11dGF0ZShzaGFyZT1jb3VudC9zdW0oY291bnQpLHNoYXJlX2ljdT1jb3VudF9pY3Uvc3VtKGNvdW50X2ljdSxuYS5ybT1UKSkNCg0KYGBgDQpgYGB7ciwgd2FybmluZz0gRn0NCiMgTG9hZCBTaGFwZWZpbGUNCnJlcXVpcmUoZ2VvYnIpDQpyZXF1aXJlKHNmKQ0Kc2hwPC1yZWFkX211bmljaXBhbGl0eSh5ZWFyPTIwMjApJT4lDQogIGZpbHRlcihhYmJyZXZfc3RhdGU9PSdTUCcpJT4lDQogIG11dGF0ZShtdW49Zmxvb3IoY29kZV9tdW5pLzEwKSklPiUNCiAgc2VsZWN0KG11bixuYW1lX211bmksZ2VvbSkNCnNocF9jZW50cm9pZDwtc2hwJT4lDQogIGdyb3VwX2J5KG11biklPiUNCiAgbXV0YXRlKGNlbnRyPXN0X2NlbnRyb2lkKGdlb20pKQ0KDQpgYGANCmBgYHtyfQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQojIE5ldHdvcmsNCm5vZGVzPC1mbG93c19jb3VudCU+JQ0KICBkYXRhLnRhYmxlOjptZWx0KG1lYXN1cmUudmFycz1jKCdtdW5fcmVzJywnbXVuX2hvc3AnKSklPiUNCiAgZGlzdGluY3QodmFsdWUpJT4lDQogIGRwbHlyOjpyZW5hbWUobXVuPXZhbHVlKQ0KDQplZGdlczwtbm9kZXMlPiVyZW5hbWUobXVuX3Jlcz1tdW4pJT4lDQogIG1lcmdlKG5vZGVzJT4lcmVuYW1lKG11bl9ob3NwPW11biksYWxsPVQpJT4lDQogIGxlZnRfam9pbihmbG93c19jb3VudCxieT1jKCdtdW5fcmVzJywnbXVuX2hvc3AnKSklPiUNCiAgbXV0YXRlX2F0KC52YXJzPWMoJ3NoYXJlJywnc2hhcmVfaWN1JyksLmZ1bnM9ZnVuY3Rpb24oeCkge2lmZWxzZShpcy5uYSh4KSwwLHgpfSklPiUNCiAgcmVuYW1lKHdlaWdodD1zaGFyZSkNCg0KZGlyX25ldDwtZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKGVkZ2VzJT4lcmVuYW1lKCksbm9kZXMsZGlyZWN0ZWQ9VFJVRSkNCm5vZGVzX2NsdXN0ZXI8LW5vZGVzJT4lDQogIG11dGF0ZShjbHVzdGVyX2ZnPWNsdXN0ZXJfZmFzdF9ncmVlZHkoYXMudW5kaXJlY3RlZChkaXJfbmV0KSkkbWVtYmVyc2hpcCwNCiAgICAgICAgIGxhYmVsPXJlb3JkZXIocGFzdGUwKCdDbHVzdGVyOiAnLGNsdXN0ZXJfZmcpLGNsdXN0ZXJfZmcpKQ0KYGBgDQojIyBGaWd1cmUgMTogU1JBRyBIb3NwaXRhbGl6YXRpb24gRmxvd3MgYW5kIENsdXN0ZXJzIGluIDIwMjENCmBgYHtyfQ0KIyBNYXANCiAgZ3BoPWdncGxvdChub2Rlc19jbHVzdGVyJT4lDQogICAgICAgICAgICAgICBpbm5lcl9qb2luKHNocCxieT1jKCdtdW4nKSksYWVzKHRleHQ9bmFtZV9tdW5pKSkrDQogICAgZ2VvbV9zZihhZXMoZ2VvbWV0cnk9Z2VvbSxmaWxsPWxhYmVsKSxsd2Q9MC4xLHNob3cubGVnZW5kPUYpKw0KICAgIGdlb21fc2YoZGF0YT1zaHBfY2VudHJvaWQlPiVmaWx0ZXIobmFtZV9tdW5pPT0nU8OjbyBQYXVsbycpJT4ldW5ncm91cCxhZXMoZ2VvbWV0cnk9Y2VudHIpKSsNCiAgICB0aGVtZV92b2lkKCkrDQogICAgdGhlbWUoYXhpcy5saW5lPWVsZW1lbnRfYmxhbmsoKSkrDQogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPXJlcChSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobj0xMixuYW1lPSdQYWlyZWQnKSx0aW1lcz0xMCkpDQoNCiAgcGxvdGx5OjpnZ3Bsb3RseShncGgsdG9vbHRpcD1jKCd0ZXh0JywnZmlsbCcpKQ0KYGBg